package com.ehome.manage.module.utils.process.engine;

import com.ehome.manage.module.utils.process.context.BaseProcessContext;
import com.ehome.manage.module.utils.process.process.ProcessDefinition;

/**
 * 流程引擎定义接口
 *
 * @author xiaxinye
 */
public interface ProcessEngine {

    /**
     * 从第一个节点启动流程，“第一个节点”的名称定义于NodeName接口
     *
     * @param process 流程定义
     * @param context 流程上下文
     * @param <C>     流程上下文类型
     */
    <C extends BaseProcessContext> void execute(ProcessDefinition<C> process, C context);

    /**
     * 从指定节点启动流程
     *
     * @param process  流程定义
     * @param context  流程上下文
     * @param nodeName 节点名称
     * @param <C>      流程上下文类型
     */
    <C extends BaseProcessContext> void execute(ProcessDefinition<C> process, C context, String nodeName);

    /**
     * 从第一个节点启动流程，无预设上下文参数
     *
     * @param process 流程定义
     * @param <C>     流程上下文类型
     */
    <C extends BaseProcessContext> void execute(ProcessDefinition<C> process);

}
